package com.code.springboot3.common;

import lombok.Data;

@Data
public class Result<T> {

    // 响应码，0表示成功，1表示失败，可根据实际业务需求扩展更多状态码
    private int code;

    // 提示信息，用于向客户端反馈操作相关的提示内容
    private String msg;

    // 返回的数据，使用泛型可以适配不同类型的数据返回，比如对象、列表等
    private T data;

    // 私有构造方法，用于在类内部创建实例，防止外部随意创建不符合规范的实例
    private Result(int code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    // 成功的响应，不带返回数据的情况，默认提示信息为"操作成功"
    public static <T> Result<T> success() {
        return new Result<>(0, "操作成功", null);
    }

    // 成功的响应，带返回数据的情况，可自定义提示信息
    public static <T> Result<T> success(T data, String msg) {
        return new Result<>(0, msg, data);
    }

    // 成功的响应，带返回数据的情况，使用默认提示信息"操作成功"
    public static <T> Result<T> success(T data) {
        return new Result<>(0, "操作成功", data);
    }

    // 失败的响应，不带返回数据的情况，可自定义提示信息
    public static <T> Result<T> failure(String msg) {
        return new Result<>(1, msg, null);
    }

    // 失败的响应，带返回数据的情况（一般失败时较少返回数据，但也可根据实际业务场景支持），可自定义提示信息
    public static <T> Result<T> failure(T data, String msg) {
        return new Result<>(1, msg, data);
    }


}